A running application on a device can access one or more device resources during the application run-time. For example, an application can use a central processing unit (CPU) to process the instructions of the application, write to or read from input/output (I/O) resources, use operating system timers, play audio, access connected devices (e.g., camera, microphone), and/or use graphics resources of the device. The amount of resources that the application can access is set by the operating system. For example, the operating system can set I/O priority and CPU priority for both a percentage use of the CPU and CPU frequency.
A problem can arise because, as the application continues to run, the application may be using resources to run but is not being interacted by a user. For example, an application that is running in the foreground performing window drawing updates (e.g., animations or other updates), may be put in the background by selecting another application as the foreground application, or by partially or fully occluding this application window. However, the application will still consume the same device resources at the same rate. For example, the application could be updating a window at the same rate even though the window is partially or fully occluded such that these updates are not or only partially seen by the user. It would be useful to restrict the amount of device resources being used if the application is not currently doing work important to the user.